﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Security.Principal;
using System.Collections.Generic;

public partial class SolicitarReunion : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            IPrincipal p = HttpContext.Current.User;
            if (!p.IsInRole("Cliente"))
            {
                Session["Mensaje"] = "Usted no posee los permisos necesarios para ingresar a esta pagina";

                if (Session["Identificador"] != null)
                {
                    //ESTO NUNCA OCURRE
                }
                else
                {
                    Response.Redirect("login.aspx");
                }
            }
            else
            {
                this.cargarPresusYEventosCliente();
                tableDegustacion.Visible = false;
            }

            //cargar los presupuestos y eventos q tiene ese cliente en los ultimos 2 meses
        }
    }

    protected void cargarPresusYEventosCliente()
    {
        App_Negocio.Cliente cli = new App_Negocio.Cliente();
        cli.ClienteId = int.Parse(Session["Identificador"].ToString());

        List<App_Negocio.Presupuesto> presupuestosCliente = cli.listarPresupuestos_Lista();
        List<App_Negocio.Evento> eventosCliente = cli.listarEventos_Lista();

        LinkedList<PresuOEveATratar> poeat = new LinkedList<PresuOEveATratar>();
        PresuOEveATratar item = null;
        int indice = 0;

        foreach (App_Negocio.Presupuesto presu in presupuestosCliente)
        {
            item = new PresuOEveATratar(indice, null, presu);
            poeat.AddLast(item);
            indice++;
        }

        foreach (App_Negocio.Evento even in eventosCliente)
        {
            item = new PresuOEveATratar(indice, even, null);
            poeat.AddLast(item);
            indice++;
        }

        estadoInicial();

        ddlPresupuesto.DataSource = poeat;
        Session["poeat"] = poeat;
        ddlPresupuesto.DataTextField = "mostrar";
        //ddlPresupuesto.DataValueField = "indice";
        ddlPresupuesto.DataBind();

    }

    protected void ddlPresupuesto_SelectedIndexChanged(object sender, EventArgs e)
    {

        string tipoReunion = "Presupuesto";
        LinkedList<PresuOEveATratar> poeat = (LinkedList<PresuOEveATratar>)Session["poeat"];
        if (poeat.ElementAt<PresuOEveATratar>(ddlPresupuesto.SelectedIndex-1).EsEvento)
        {
            tipoReunion = "Evento";
        }
        List<App_Negocio.Reunion_Tipo> listaTR = App_Negocio.Reunion_Tipo.listarReunionTipo(tipoReunion);
        Session["listaTR"] = listaTR;
        ddlMotivo.Enabled = true;
        ddlMotivo.DataSource = listaTR;
        ddlMotivo.DataTextField = "nombre";
        ddlMotivo.DataValueField = "id";
        ddlMotivo.DataBind();
    }

    protected void ddlMotivo_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ddlMotivo.SelectedIndex != 0)
        {

            //cargar los motivos que correspondan si lo que eligio es un presupuesto o es un evento
            List<App_Negocio.Reunion_Tipo> listaTR = (List<App_Negocio.Reunion_Tipo>)Session["listaTR"];

            int tipoEmpleado = listaTR.ElementAt(ddlMotivo.SelectedIndex - 1).EmpleadoTipo.Id;
            DateTime fechaSeleccionada = DateTime.Parse(txtFecha.Text);

            DataView horariosDisponibles = App_Negocio.Reunion.horariosDisponibles(tipoEmpleado, fechaSeleccionada).DefaultView;
            ddlHoras.DataSource = horariosDisponibles;
            ddlHoras.DataTextField = "Horas";
            ddlHoras.DataValueField = "Horas";
            ddlHoras.DataBind();
            ddlHoras.Enabled = true;
        }
        else
        {
            ddlHoras.Enabled = false;
            ddlHoras.Items.Clear();
            ddlHoras.Items.Add("Horarios Disponibles");
        }
    }

    protected void ddlHoras_SelectedIndexChanged(object sender, EventArgs e)
    {
        LinkedList<PresuOEveATratar> poeat = (LinkedList<PresuOEveATratar>)Session["poeat"];
        if (poeat.ElementAt<PresuOEveATratar>(ddlPresupuesto.SelectedIndex - 1).EsEvento)
        {
            if (ddlHoras.SelectedIndex != 0)
            {

                App_Negocio.Alimento ali = new App_Negocio.Alimento();
                ali.AlimentoGrupo = null;
                Session["AlimentoPrincipal"] = ali;
                cargarPlato(ddlPlato1);
                estadoInicialDegustacion();
                tableDegustacion.Visible = true;
            }
            else
            {
                estadoInicialDegustacion();
            }
        }
    }

    protected void btnEnviar_Click(object sender, EventArgs e)
    {
       
    }

    private void estadoInicial()
    {
        ddlPresupuesto.SelectedIndex = 0;
        ddlMotivo.SelectedIndex = 0;
        ddlMotivo.Enabled = false;
        ddlHoras.SelectedIndex = 0;
        ddlHoras.Enabled = false;
        
    }

    private void estadoInicialDegustacion()
    {
        tableDegustacion.Visible = false;
        ddlPlato1.Enabled = true;
        ddlPlato2.Enabled = false;
        ddlPlato3.Enabled = false;
        ddlPlato2.Items.Clear();
        ddlPlato2.Items.Add("Plato Opción 2");
        ddlPlato2.Enabled = false;
        ddlPlato3.Items.Clear();
        ddlPlato3.Items.Add("Plato Opción 3");
    }

    private class PresuOEveATratar
    {
        private int indice;

        public int Indice
        {
            get { return indice; }
        }

        private string mostrar;

        public string Mostrar
        {
            get { return mostrar; }
        }

        private bool esEvento;

        public bool EsEvento
        {
            get { return esEvento; }
        }

        private App_Negocio.Presupuesto presupuesto;

        public App_Negocio.Presupuesto Presupuesto
        {
            get { return presupuesto; }
        }

        private App_Negocio.Evento evento;

        public App_Negocio.Evento Evento
        {
            get { return evento; }
        }

        
        public PresuOEveATratar(int indice, App_Negocio.Evento evento, App_Negocio.Presupuesto presupuesto)
        {
            if (evento != null)
            {
                this.indice = indice;
                this.evento = evento;
                this.esEvento = true;
                this.mostrar = evento.FechaEvento.ToShortDateString()+ " - Evento";
            }
            else if (presupuesto != null)
            {
                this.indice = indice;
                this.presupuesto = presupuesto;
                this.esEvento = false;
                this.mostrar = presupuesto.FechaCreacion.ToShortDateString() + " - Presupuesto";
            }
            else
            {
                throw new Exception("No se cargaron los datos necesarios");
            }
        }
    }

    protected void btnConfirmarCancelacion_Click(object sender, EventArgs e)
    {
        App_Negocio.Reunion reunion = new App_Negocio.Reunion();
        reunion.Cliente = new App_Negocio.Cliente();
        reunion.Cliente.ClienteId = int.Parse(Session["Identificador"].ToString());
        reunion.Fecha = DateTime.Parse(txtFecha.Text);
        reunion.Observaciones = tbxComentario.Text;
        reunion.Hora = ddlHoras.SelectedValue;
        List<App_Negocio.Reunion_Tipo> listaTR = (List<App_Negocio.Reunion_Tipo>)Session["listaTR"];

        reunion.ReunionTipo = listaTR.ElementAt(ddlMotivo.SelectedIndex - 1);


        LinkedList<PresuOEveATratar> poeat = (LinkedList<PresuOEveATratar>)Session["poeat"];
        if (poeat.ElementAt<PresuOEveATratar>(ddlPresupuesto.SelectedIndex - 1).EsEvento)
        {
            reunion.Evento = poeat.ElementAt<PresuOEveATratar>(ddlPresupuesto.SelectedIndex - 1).Evento;
            reunion.Presupuesto = new App_Negocio.Presupuesto();
            reunion.Presupuesto.Id = 0;
            reunion.PlatosADegustar = new List<App_Negocio.Alimento>();
            if (reunion.ReunionTipo.Id == 3)
            {
                if (ddlPlato1.SelectedIndex > 0)
                {
                    App_Negocio.Alimento a1= new App_Negocio.Alimento();
                    a1.Id= int.Parse(ddlPlato1.SelectedItem.Value);
                    reunion.PlatosADegustar.Add(a1);
                    if (ddlPlato2.SelectedIndex > 0)
                    {
                        a1 = new App_Negocio.Alimento();
                        a1.Id = int.Parse(ddlPlato2.SelectedItem.Value);
                        reunion.PlatosADegustar.Add(a1);
                        if (ddlPlato3.SelectedIndex > 0)
                        {
                            a1 = new App_Negocio.Alimento();
                            a1.Id = int.Parse(ddlPlato3.SelectedItem.Value);
                            reunion.PlatosADegustar.Add(a1);
                        }
                    }
                }
            }

        }
        else
        {
            reunion.Presupuesto = poeat.ElementAt<PresuOEveATratar>(ddlPresupuesto.SelectedIndex - 1).Presupuesto;
            reunion.Evento = new App_Negocio.Evento();
            reunion.Evento.Id = 0;
        }
        reunion.guardarReunion();

        Response.Redirect("Principal_Clientes.aspx");
    }   
    
    //aca tan los metodos de los combos

    public void cargarPlato(DropDownList ddlPlato)
    {
        App_Negocio.Alimento ali = (App_Negocio.Alimento)Session["AlimentoPrincipal"];
        List<App_Negocio.Alimento> lista = null;
        if (ali.AlimentoGrupo.Nombre == "")
        {
            LinkedList<PresuOEveATratar> poeat = (LinkedList<PresuOEveATratar>)Session["poeat"];
            lista = ali.listarAlimentosPorGrupo(poeat.ElementAt<PresuOEveATratar>(ddlPresupuesto.SelectedIndex - 1).Evento.Id);
            Session["AlimentoPrincipal"] = ali;
        }
        else
        {
            lista = ali.listarAlimentosPorGrupo();
        }
        ddlPlato.DataSource = lista;
        ddlPlato.DataTextField = "nombre";
        ddlPlato.DataValueField = "id";
        ddlPlato.DataBind();
    }
    
    protected void ddlPlato1_SelectedIndexChanged(object sender, EventArgs e)
    {

        if (ddlPlato1.SelectedIndex != 0)
        {

            App_Negocio.Alimento ali = new App_Negocio.Alimento();
            imgPlato.ImageUrl = ali.buscarFotoAlimento2(int.Parse(ddlPlato1.SelectedValue.ToString()));
            ddlPlato2.Items.Clear();
            ddlPlato2.Items.Add("Plato Opción 2");
            cargarPlato(ddlPlato2);
            ddlPlato2.Items.RemoveAt(ddlPlato1.SelectedIndex);
            ddlPlato2.Enabled = true;
            ddlPlato3.Items.Clear();
            ddlPlato3.Items.Add("Plato Opción 3");
            ddlPlato3.Enabled = false;

            /*this.cargarMenuDetalles(int.Parse(ddlPlato1.SelectedValue), GVMenu01);
            Accordion1.SelectedIndex = 0;

            this.borrarGrilla(GVMenu02);
            this.borrarGrilla(GVMenu03);*/
        }
        else
        {
            
            ddlPlato2.Items.Clear();
            ddlPlato2.Items.Add("Plato Opción 2");
            ddlPlato2.Enabled = false;
            ddlPlato3.Items.Clear();
            ddlPlato3.Items.Add("Plato Opción 3");

            ddlPlato3.Enabled = false;
            /*this.borrarGrilla(GVMenu02);
            this.borrarGrilla(GVMenu03);*/
        }
    }

    protected void ddlPlato2_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ddlPlato2.SelectedIndex != 0)
        {
            App_Negocio.Alimento ali = new App_Negocio.Alimento();
            imgPlato.ImageUrl = ali.buscarFotoAlimento2(int.Parse(ddlPlato2.SelectedValue.ToString()));

            ddlPlato3.Items.Clear();
            ddlPlato3.Items.Add("Plato Opción 3");
            cargarPlato(ddlPlato3);
            ddlPlato3.Items.RemoveAt(ddlPlato1.SelectedIndex);
            ddlPlato3.Items.RemoveAt(ddlPlato2.SelectedIndex);
            ddlPlato3.Enabled = true;
            /*this.cargarMenuDetalles(int.Parse(ddlPlato2.SelectedValue), GVMenu02);
            Accordion1.SelectedIndex = 1;
            this.borrarGrilla(GVMenu03);*/
        }
        else
        {
            ddlPlato3.Items.Clear();
            ddlPlato3.Items.Add("Plato Opción 3");
            ddlPlato3.Enabled = false;
            //this.borrarGrilla(GVMenu03);
        }
    }

    protected void ddlPlato3_SelectedIndexChanged(object sender, EventArgs e)
    {
        App_Negocio.Alimento ali = new App_Negocio.Alimento();
        imgPlato.ImageUrl = ali.buscarFotoAlimento2(int.Parse(ddlPlato3.SelectedValue.ToString()));

        /*this.cargarMenuDetalles(int.Parse(ddlPlato3.SelectedValue), GVMenu03);
        Accordion1.SelectedIndex = 2;*/
        //no se si se usa
    }
}
